#!/bin/bash

# 二进制可执行文件目录
rar_command_path="/usr/local/bin/"
zip_command_path="/usr/bin/"

# 定义路径
base_path=$(cd `dirname $0`; pwd) # 当前目录
tmp_deal_file_path="/tmp/downpack/" # 处理后存放目录
file_web_path="/data/pack" # 文件在服务器的存放目录
file_add_path=${base_path}"/source/" # 附件目录
deal_log_path=${base_path}"/log/" # 日志目录

# zip | rar 文件需要替换或删除的文件
deletefiles=("*.url" "Readme-说明.htm" "Readme-说明.html" "使用说明.txt" "下载使用说明.txt" "使用更新说明.txt" "西西*" "PC6*" "软件说明.txt" "文件说明.txt" "www.cr173.com*" "欢迎访问西西*" "173软件下载.txt" "173下载使用说明.txt")

# 初始化路径
if [ ! -d ${tmp_deal_file_path} ]; then
  mkdir -p ${tmp_deal_file_path}
fi
if [ ! -d ${file_add_path} ]; then
  mkdir -p ${file_add_path}
fi
if [ ! -d ${deal_log_path} ]; then
  mkdir -p ${deal_log_path}
fi

IFS=$'\n'
cd ${base_path} # 进入当前目录

# 遍历制定目录下的文件
for file in ${file_web_path}/*; do
  
  # 获取文件信息
  file_name=$(basename ${file}) # 获取文件名称，有后缀
  file_ext=$( echo $( echo ${file} | awk -F '.' '{print $NF}' ) | tr 'A-Z' 'a-z') # 获取文件后缀

  # 只处理 后缀为 zip 或者 rar 的文件
  if [[ ${file_ext} == "zip" || ${file_ext} == "rar" ]]; then
    tmp_dir=${tmp_deal_file_path}$(basename ${file} .${file_ext}) # 因为可能出现文件类型是rar的，但是后缀是zip的，所以，这个地方动态处理
    if [ ! -d ${tmp_dir} ]; then
        mkdir -p ${tmp_dir}
    fi

    # zip 文件处理
    file ${file} | grep 'Zip archive data'
    if [ $? -eq 0 ]; then
      ${zip_command_path}unzip -q -o -O cp936 ${file} -d ${tmp_dir}
      if [ $? != 0 ]; then
        rm -rf ${tmp_dir}
        echo "${file} unzip error the file is bad zipfile" | tee -a ${deal_log_path}zip_error.log
        continue
      else
        cd ${tmp_dir} # 进入解压目录
        # 删除版权等信息
        for delfile in ${deletefiles[@]};
        do
          `find . -iname ${delfile} -exec rm -rf {} \;` #循环删除数组里面的文件
        done
        cp -arf ${file_add_path}Readme-说明.htm .
        ${zip_command_path}zip -q -r ${tmp_dir}".zip" *
      fi
    fi

    # rar 文件处理
    file ${file} | grep 'RAR archive data' >/dev/null
    if [ $? -eq 0 ]; then
      # 增加rar密码文件判断，加密文件以"星号"开头，所以如果发现行首是*开头说明压缩包里面有加密文件。只要有一个加密文件也都不再处理这个rar文件了。
      encryptedfiles=`rar va ${file} | grep -A1000 '\-\-\-\-\-' | grep -B1000  '\-\-\-\-\-'|grep '^\*'|wc -l`
      if [ ${encryptedfiles} != 0 ]; then
        echo "${file} rar error need password or the file is bad rarfile" | tee -a ${deal_log_path}rar_error.log
        continue
      fi
      ${rar_command_path}rar e -idp -y ${file} ${tmp_dir}
      if [ $? != 0 ]; then
        rm -rf ${tmp_dir}
        echo "${file} unrar error or the file is bad rarfile" | tee -a ${deal_log_path}rar_error.log
        continue
      else
        cd ${tmp_dir} # 进入解压目录
        # 删除版权等信息
        for delfile in ${deletefiles[@]};
        do
          `find . -iname ${delfile} -exec rm -rf {} \;` #循环删除数组里面的文件
        done
        cp -arf ${file_add_path}Readme-说明.htm .
        ${rar_command_path}rar a -ed ${tmp_dir} *
      fi
    fi

    cd ${tmp_deal_file_path}
    # 删除解压文件 删除原文件 移动处理好的文件到原目录
    rm -rf ${tmp_dir}
    rm -rf ${file}
    # mv ${tmp_dir}".zip" ${file_web_path}
  else
    # 如果是其他文件直接跳过
    continue
  fi
done